package de.axa.smartfix.monitoring.model;

import java.io.Serializable;
import java.util.Date;

/**
 * @author tobias
 * 
 */
public interface IMonitor extends Serializable {

	/**
	 * Dieser Wert muss zurückgegeben werden, wenn eine Subklasse von IMonitor
	 * kein valides Datum angeben kann
	 */
	public final static Date NO_DATE_AVAILABLE = new Date(0);
	public static final String PROPERTY_OLDEST = "oldest";
	public static final String PROPERTY_COUNT = "count";
	public static final String PROPERTY_PARENT = "parent";
	public static final String PROPERTY_NAME = "name";
	public static final String PROPERTY_DESCRIPTION = "description";

	/**
	 * @return Gibt den Namen der zu überwachenden Resource zurück
	 */
	public String getName();

	/**
	 * Setzt den Namen der zu überwachenden Resource
	 * 
	 * @param name
	 */
	public void setName(String name);

	/**
	 * @return Gib die Beschreibung der zu überwachenden Resource zurück
	 */
	public String getDescription();

	/**
	 * Setzt die Beschreibung der zu überwachenden Resource
	 * 
	 * @param description
	 */
	public void setDescription(String description);

	/**
	 * @return Anzahl der überwachten Resourcen
	 */
	public int getCount();

	/**
	 * Gibt das Datum der ältesten überwachten Resource zurück.
	 * 
	 * Sollte keine Resource vorhanden sein, wird der Wert
	 * IMonitor.NO_DATE_AVAILABLE zurückgegeben.
	 * 
	 * @return Das Datum der ältesten überwachten Resource
	 */
	public Date getOldest();

	/**
	 * Liefert das Vater-Element
	 * 
	 * @return
	 */
	public Object getParent();

	/**
	 * Setzt das Vaterelemnt
	 * 
	 * @param o
	 */
	public void setParent(Object o);

	/**
	 * Gibt einen Iterator abhäniger IMonitorLocations zurück
	 * 
	 * @return Kindelemente
	 */
	public IMonitor[] getChildren();

	/**
	 * Fügt den IMonitor m hinzu.
	 * 
	 * @param m
	 */
	public void add(IMonitor m);

	/**
	 * Entfernt den übergeben IMonitor.
	 * 
	 * @param m
	 */
	public void remove(IMonitor m);

	/**
	 * Entfernt alle Kindelemente.
	 */
	public void clear();

	/**
	 * Die Methode update() aktualisiert die Werte getOldest() und getCount()
	 * der überwachten Resource. Sollte dies vor Aufruf der beiden Methoden
	 * nicht ausgeführt worden sein, werden nur Initialwerte zurückgegeben
	 * <ul>
	 * <li> <code>getOldest() == IMonitor.NO_DATE_AVAILABLE</code>
	 * <li> <code>getCount() == 0</code>
	 * </ul>
	 */
	public void update();

}
